Features

The WTD Token includes several features beyond basic ERC20 transfers.

Burn

Any token holder can permanently destroy their tokens, reducing the circulating supply.

Functions:

  • burn(amount) — Burn tokens from your own balance

  • burnFrom(account, amount) — Burn tokens from another account (requires prior approval)

Both functions emit a TokensBurned(account, amount) event in addition to the standard ERC20 Transfer event.

circle-info

Burning tokens does not restore allocation capacity. If an allocation category has been fully claimed, burning those tokens does not allow it to be claimed again.

Pause / Unpause

The admin can pause all token transfers in an emergency. While paused, no transfers, minting, or burning can occur.

Functions:

  • pause() — Pause all transfers (admin only)

  • unpause() — Resume transfers (admin only)

circle-exclamation

Permit (EIP-2612)

WTD supports gasless token approvals through the EIP-2612 permit standard. Instead of submitting an on-chain approve transaction, a holder can sign an off-chain message that anyone can submit to grant approval.

permit(owner, spender, value, deadline, v, r, s)
permit(owner, spender, value, deadline, v, r, s)

This allows:

  • Approve and transfer in a single transaction (via a relayer or integrated dApp)

  • Reduced gas costs for users who don't hold native ETH/gas tokens

Voting & Delegation (ERC20Votes)

WTD tokens carry on-chain voting power that can be delegated. This enables governance proposals and voting without transferring tokens.

Key concepts:

  • Voting power must be explicitly delegated (even to yourself) before it becomes active

  • Call delegate(delegatee) to assign your voting power to any address

  • Call delegate(yourOwnAddress) to self-delegate and activate your own voting power

  • Voting power is checkpointed at each block, allowing historical lookups

circle-info

Clock mode: The contract uses timestamp-based checkpoints (mode=timestamp) rather than block numbers.

Functions:

  • delegate(delegatee) — Delegate voting power

  • delegateBySig(delegatee, nonce, expiry, v, r, s) — Delegate via signature

  • getVotes(account) — Get current voting power of an account

  • getPastVotes(account, timepoint) — Get voting power at a past timestamp